/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.tika.parser.wordperfect;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * WordPerfect 6+ constant values used for mapping WordPerfect charsets to
 * unicode equivalents when possible.
 *
 * @author Pascal Essiembre
 */
final class WP6Charsets {
    public static final char[] DEFAULT_EXTENDED_INTL_CHARS =
            new char[]{'\0', '\u00E5', '\u00C5', '\u00E6', '\u00C6', '\u00E4', '\u00C4', '\u00E1',
                    '\u00E0', '\u00E2', '\u00E3', '\u00C3', '\u00E7', '\u00C7', '\u00EB', '\u00E9',
                    '\u00C9', '\u00E8', '\u00EA', '\u00ED', '\u00F1', '\u00D1', '\u00F8', '\u00D8',
                    '\u00F5', '\u00D5', '\u00F6', '\u00D6', '\u00FC', '\u00DC', '\u00FA', '\u00F9',
                    '\u00DF',};
    /**
     * Extended character sets used when fixed-length multi-byte functions
     * with a byte value of 240 (0xF0) are found in a WordPerfect document.
     * Those character set codes may be specific to WordPerfect
     * file specifications and may or may not be considered standard
     * outside WordPerfect. Applies to version 6 and likely higher.
     */
    public static final char[][] EXTENDED_CHARSETS = new char[][]{
            // WP Charset 0: ASCII (96 chars)
            {' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0',
                    '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@',
                    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
                    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`',
                    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
                    'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '\u00A0'},
            // WP Charset 1: Multinational (242 chars)
            {'\u0300', '\u00b7', '\u0303', '\u0302', '\u0335', '\u0338', '\u0301', '\u0308',
                    '\u0304', '\u0313', '\u0315', '\u02bc', '\u0326', '\u0315', '\u00b0', '\u0307',
                    '\u030b', '\u0327', '\u0328', '\u030c', '\u0337', '\u0305', '\u0306', '\u00df',
                    '\u0138', '\u006a', '\u00c1', '\u00e1', '\u00c2', '\u00e2', '\u00c4', '\u00e4',
                    '\u00c0', '\u00e0', '\u00c5', '\u00e5', '\u00c6', '\u00e6', '\u00c7', '\u00e7',
                    '\u00c9', '\u00e9', '\u00ca', '\u00ea', '\u00cb', '\u00eb', '\u00c8', '\u00e8',
                    '\u00cd', '\u00ed', '\u00ce', '\u00ee', '\u00cf', '\u00ef', '\u00cc', '\u00ec',
                    '\u00d1', '\u00f1', '\u00d3', '\u00f3', '\u00d4', '\u00f4', '\u00d6', '\u00f6',
                    '\u00d2', '\u00f2', '\u00da', '\u00fa', '\u00db', '\u00fb', '\u00dc', '\u00fc',
                    '\u00d9', '\u00f9', '\u0178', '\u00ff', '\u00c3', '\u00e3', '\u0110', '\u0111',
                    '\u00d8', '\u00f8', '\u00d5', '\u00f5', '\u00dd', '\u00fd', '\u00d0', '\u00f0',
                    '\u00de', '\u00fe', '\u0102', '\u0103', '\u0100', '\u0101', '\u0104', '\u0105',
                    '\u0106', '\u0107', '\u010c', '\u010d', '\u0108', '\u0109', '\u010a', '\u010b',
                    '\u010e', '\u010f', '\u011a', '\u011b', '\u0116', '\u0117', '\u0112', '\u0113',
                    '\u0118', '\u0119', '\u01f4', '\u01f5', '\u011e', '\u011f', '\u01e6', '\u01e7',
                    '\u0122', '\u0123', '\u011c', '\u011d', '\u0120', '\u0121', '\u0124', '\u0125',
                    '\u0126', '\u0127', '\u0130', '\u0069', '\u012a', '\u012b', '\u012e', '\u012f',
                    '\u0128', '\u0129', '\u0132', '\u0133', '\u0134', '\u0135', '\u0136', '\u0137',
                    '\u0139', '\u013a', '\u013d', '\u013e', '\u013b', '\u013c', '\u013f', '\u0140',
                    '\u0141', '\u0142', '\u0143', '\u0144', '\u0000', '\u0149', '\u0147', '\u0148',
                    '\u0145', '\u0146', '\u0150', '\u0151', '\u014c', '\u014d', '\u0152', '\u0153',
                    '\u0154', '\u0155', '\u0158', '\u0159', '\u0156', '\u0157', '\u015a', '\u015b',
                    '\u0160', '\u0161', '\u015e', '\u015f', '\u015c', '\u015d', '\u0164', '\u0165',
                    '\u0162', '\u0163', '\u0166', '\u0167', '\u016c', '\u016d', '\u0170', '\u0171',
                    '\u016a', '\u016b', '\u0172', '\u0173', '\u016e', '\u016f', '\u0168', '\u0169',
                    '\u0174', '\u0175', '\u0176', '\u0177', '\u0179', '\u017a', '\u017d', '\u017e',
                    '\u017b', '\u017c', '\u014a', '\u014b', '\u0000', '\u0000', '\u0000', '\u0000',
                    '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000', '\u0000',
                    '\u0000', '\u0000', '\u1ef2', '\u1ef3', '\u010e', '\u010f', '\u01a0', '\u01a1',
                    '\u01af', '\u01b0', '\u0114', '\u0115', '\u012c', '\u012d', '\u0049', '\u0131',
                    '\u014e', '\u014f'},
            // WP Charset 2: Phonetic (145 chars)
            {'\u02b9', '\u02ba', '\u02bb', '\u0020', '\u02bd', '\u02bc', '\u0020', '\u02be',
                    '\u02bf', '\u0310', '\u02d0', '\u02d1', '\u0306', '\u032e', '\u0329', '\u02c8',
                    '\u02cc', '\u02c9', '\u02ca', '\u02cb', '\u02cd', '\u02ce', '\u02cf', '\u02c6',
                    '\u02c7', '\u02dc', '\u0325', '\u02da', '\u032d', '\u032c', '\u0323', '\u0308',
                    '\u0324', '\u031c', '\u031d', '\u031e', '\u031f', '\u0320', '\u0321', '\u0322',
                    '\u032a', '\u032b', '\u02d2', '\u02d3', '\u0361', '\u0356', '\u005f', '\u2017',
                    '\u033e', '\u02db', '\u0327', '\u0233', '\u030d', '\u02b0', '\u02b6', '\u0250',
                    '\u0251', '\u0252', '\u0253', '\u0299', '\u0254', '\u0255', '\u0297', '\u0256',
                    '\u0257', '\u0258', '\u0259', '\u025a', '\u025b', '\u025c', '\u025d', '\u029a',
                    '\u025e', '\u025f', '\u0278', '\u0261', '\u0260', '\u0262', '\u029b', '\u0263',
                    '\u0264', '\u0265', '\u0266', '\u0267', '\u029c', '\u0268', '\u026a', '\u0269',
                    '\u029d', '\u029e', '\u026b', '\u026c', '\u026d', '\u029f', '\u026e', '\u028e',
                    '\u026f', '\u0270', '\u0271', '\u0272', '\u0273', '\u0274', '\u0276', '\u0277',
                    '\u02a0', '\u0279', '\u027a', '\u027b', '\u027c', '\u027d', '\u027e', '\u027f',
                    '\u0280', '\u0281', '\u0282', '\u0283', '\u0284', '\u0285', '\u0286', '\u0287',
                    '\u0288', '\u0275', '\u0289', '\u028a', '\u028c', '\u028b', '\u028d', '\u03c7',
                    '\u028f', '\u0290', '\u0291', '\u0292', '\u0293', '\u0294', '\u0295', '\u0296',
                    '\u02a1', '\u02a2', '\u0298', '\u02a3', '\u02a4', '\u02a5', '\u02a6', '\u02a7',
                    '\u02a8'},
            // WP Charset 3: Box Drawing (88 chars)
            {'\u2591', '\u2592', '\u2593', '\u2588', '\u258c', '\u2580', '\u2590', '\u2584',
                    '\u2500', '\u2502', '\u250c', '\u2510', '\u2518', '\u2514', '\u251c', '\u252c',
                    '\u2524', '\u2534', '\u253c', '\u2550', '\u2551', '\u2554', '\u2557', '\u255d',
                    '\u255a', '\u2560', '\u2566', '\u2563', '\u2569', '\u256c', '\u2552', '\u2555',
                    '\u255b', '\u2558', '\u2553', '\u2556', '\u255c', '\u2559', '\u255e', '\u2565',
                    '\u2561', '\u2568', '\u255f', '\u2564', '\u2562', '\u2567', '\u256b', '\u256a',
                    '\u2574', '\u2575', '\u2576', '\u2577', '\u2578', '\u2579', '\u257a', '\u257b',
                    '\u257c', '\u257e', '\u257d', '\u257f', '\u251f', '\u2522', '\u251e', '\u2521',
                    '\u252e', '\u2532', '\u252d', '\u2531', '\u2527', '\u2526', '\u252a', '\u2529',
                    '\u2536', '\u253a', '\u2535', '\u2539', '\u2541', '\u2546', '\u253e', '\u2540',
                    '\u2544', '\u254a', '\u253d', '\u2545', '\u2548', '\u2543', '\u2549', '\u2547'},
            // WP Charset 4: Typographic Symbols (102 chars)
            {'\u25cf', '\u25cb', '\u25a0', '\u2022', '\u002a', '\u00b6', '\u00a7', '\u00a1',
                    '\u00bf', '\u00ab', '\u00bb', '\u00a3', '\u00a5', '\u20a7', '\u0192', '\u00aa',
                    '\u00ba', '\u00bd', '\u00bc', '\u00a2', '\u00b2', '\u207f', '\u00ae', '\u00a9',
                    '\u00a4', '\u00be', '\u00b3', '\u201b', '\u2019', '\u2018', '\u201f', '\u201d',
                    '\u201c', '\u2013', '\u2014', '\u2039', '\u203a', '\u25cb', '\u25a1', '\u2020',
                    '\u2021', '\u2122', '\u2120', '\u211e', '\u25cf', '\u25e6', '\u25a0', '\u25aa',
                    '\u25a1', '\u25ab', '\u2012', '\ufb00', '\ufb03', '\ufb04', '\ufb01', '\ufb02',
                    '\u2026', '\u0024', '\u20a3', '\u20a2', '\u20a0', '\u20a4', '\u201a', '\u201e',
                    '\u2153', '\u2154', '\u215b', '\u215c', '\u215d', '\u215e', '\u24c2', '\u24c5',
                    '\u20ac', '\u2105', '\u2106', '\u2030', '\u2116', '\u2014', '\u00b9', '\u2409',
                    '\u240c', '\u240d', '\u240a', '\u2424', '\u240b', '\u267c', '\u20a9', '\u20a6',
                    '\u20a8', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u1d11', '\u1d12'
                    // last two uncertain
            },
            // WP Charset 5: Iconic Symbol (255 chars)
            {'\u2661', '\u2662', '\u2667', '\u2664', '\u2642', '\u2640', '\u263c', '\u263a',
                    '\u263b', '\u266a', '\u266c', '\u25ac', '\u2302', '\u203c', '\u221a', '\u21a8',
                    '\u2310', '\u2319', '\u25d8', '\u25d9', '\u21b5', '\u2104', '\u261c', '\u23b5',
                    '\u2610', '\u2612', '\u2639', '\u266f', '\u266d', '\u266e', '\u260e', '\u231a',
                    '\u231b', '\u2701', '\u2702', '\u2703', '\u2704', '\u260e', '\u2706', '\u2707',
                    '\u2708', '\u2709', '\u261b', '\u261e', '\u270c', '\u270d', '\u270e', '\u270f',
                    '\u2710', '\u2711', '\u2712', '\u2713', '\u2714', '\u2715', '\u2716', '\u2717',
                    '\u2718', '\u2719', '\u271a', '\u271b', '\u271c', '\u271d', '\u271e', '\u271f',
                    '\u2720', '\u2721', '\u2722', '\u2723', '\u2724', '\u2725', '\u2726', '\u2727',
                    '\u2605', '\u2606', '\u272a', '\u272b', '\u272c', '\u272d', '\u272e', '\u272f',
                    '\u2730', '\u2731', '\u2732', '\u2733', '\u2734', '\u2735', '\u2736', '\u2737',
                    '\u2738', '\u2739', '\u273a', '\u273b', '\u273c', '\u273d', '\u273e', '\u273f',
                    '\u2740', '\u2741', '\u2742', '\u2743', '\u2744', '\u2745', '\u2746', '\u2747',
                    '\u2748', '\u2749', '\u274a', '\u274b', '\u25cf', '\u274d', '\u25a0', '\u274f',
                    '\u2750', '\u2751', '\u2752', '\u25b2', '\u25bc', '\u25c6', '\u2756', '\u25d7',
                    '\u2758', '\u2759', '\u275a', '\u275b', '\u275c', '\u275d', '\u275e', '\u2036',
                    '\u2033', '\u0020', '\u0020', '\u0020', '\u0020', '\u2329', '\u232a', '\u005b',
                    '\u005d', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u2190', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u21e8', '\u21e6',
                    '\u2794', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u25d6', '\u0020',
                    '\u0020', '\u2761', '\u2762', '\u2763', '\u2764', '\u2765', '\u2766', '\u2767',
                    '\u2663', '\u2666', '\u2665', '\u2660', '\u2780', '\u2781', '\u2782', '\u2783',
                    '\u2784', '\u2785', '\u2786', '\u2787', '\u2788', '\u2789', '\u2776', '\u2777',
                    '\u2778', '\u2779', '\u277a', '\u277b', '\u277c', '\u277d', '\u277e', '\u277f',
                    '\u2780', '\u2781', '\u2782', '\u2783', '\u2784', '\u2785', '\u2786', '\u2787',
                    '\u2788', '\u2789', '\u278a', '\u278b', '\u278c', '\u278d', '\u278e', '\u278f',
                    '\u2790', '\u2791', '\u2792', '\u2793', '\u2794', '\u2192', '\u2194', '\u2195',
                    '\u2798', '\u2799', '\u279a', '\u279b', '\u279c', '\u279d', '\u279e', '\u279f',
                    '\u27a0', '\u27a1', '\u27a2', '\u27a3', '\u27a4', '\u27a5', '\u27a6', '\u27a7',
                    '\u27a8', '\u27a9', '\u27aa', '\u27ab', '\u27ac', '\u27ad', '\u27ae', '\u27af',
                    '\u0020', '\u27b1', '\u27b2', '\u27b3', '\u27b4', '\u27b5', '\u27b6', '\u27b7',
                    '\u27b8', '\u27b9', '\u27ba', '\u27bb', '\u27bc', '\u27bd', '\u27be'},
            // WP Charset 6: Math/Scientific (238 chars)
            {'\u2212', '\u00b1', '\u2264', '\u2265', '\u221d', '\u002f', '\u2215', '\u2216',
                    '\u00f7', '\u2223', '\u27e8', '\u27e9', '\u223c', '\u2248', '\u2261', '\u2208',
                    '\u2229', '\u2225', '\u2211', '\u221e', '\u00ac', '\u2192', '\u2190', '\u2191',
                    '\u2193', '\u2194', '\u2195', '\u25b8', '\u25c2', '\u25b4', '\u25be', '\u22c5',
                    '\u00b7', '\u2218', '\u2219', '\u212b', '\u00b0', '\u00b5', '\u203e', '\u00d7',
                    '\u222b', '\u220f', '\u2213', '\u2207', '\u2202', '\u2032', '\u2033', '\u2192',
                    '\u212f', '\u2113', '\u210f', '\u2111', '\u211c', '\u2118', '\u21c4', '\u21c6',
                    '\u21d2', '\u21d0', '\u21d1', '\u21d3', '\u21d4', '\u21d5', '\u2197', '\u2198',
                    '\u2196', '\u2199', '\u222a', '\u2282', '\u2283', '\u2286', '\u2287', '\u220d',
                    '\u2205', '\u2308', '\u2309', '\u230a', '\u230b', '\u226a', '\u226b', '\u2220',
                    '\u2297', '\u2295', '\u2296', '\u2a38', '\u2299', '\u2227', '\u2228', '\u22bb',
                    '\u22a4', '\u22a5', '\u2312', '\u22a2', '\u22a3', '\u25a1', '\u25a0', '\u25ca',
                    '\u25c6', '\u27e6', '\u27e7', '\u2260', '\u2262', '\u2235', '\u2234', '\u2237',
                    '\u222e', '\u2112', '\u212d', '\u2128', '\u2118', '\u20dd', '\u29cb', '\u25c7',
                    '\u22c6', '\u2034', '\u2210', '\u2243', '\u2245', '\u227a', '\u227c', '\u227b',
                    '\u227d', '\u2203', '\u2200', '\u22d8', '\u22d9', '\u228e', '\u228a', '\u228b',
                    '\u2293', '\u2294', '\u228f', '\u2291', '\u22e4', '\u2290', '\u2292', '\u22e5',
                    '\u25b3', '\u25bd', '\u25c3', '\u25b9', '\u22c8', '\u2323', '\u2322', '\u25ef',
                    '\u219d', '\u21a9', '\u21aa', '\u21a3', '\u21bc', '\u21bd', '\u21c0', '\u21c1',
                    '\u21cc', '\u21cb', '\u21bf', '\u21be', '\u21c3', '\u21c2', '\u21c9', '\u21c7',
                    '\u22d3', '\u22d2', '\u22d0', '\u22d1', '\u229a', '\u229b', '\u229d', '\u2127',
                    '\u2221', '\u2222', '\u25c3', '\u25b9', '\u25b5', '\u25bf', '\u2214', '\u2250',
                    '\u2252', '\u2253', '\u224e', '\u224d', '\u22a8', '\u2258', '\u226c', '\u0285',
                    '\u2605', '\u226e', '\u2270', '\u226f', '\u2271', '\u2241', '\u2244', '\u2247',
                    '\u2249', '\u2280', '\u22e0', '\u2281', '\u22e1', '\u2284', '\u2285', '\u2288',
                    '\u2289', '\u0020', '\u0020', '\u22e2', '\u22e3', '\u2226', '\u2224', '\u226d',
                    '\u2204', '\u2209', '\u2247', '\u2130', '\u2131', '\u2102', '\u0020', '\u2115',
                    '\u211d', '\u225f', '\u22be', '\u220b', '\u22ef', '\u2026', '\u22ee', '\u22f1',
                    '\u0020', '\u20e1', '\u002b', '\u002d', '\u003d', '\u002a', '\u2032', '\u2033',
                    '\u2034', '\u210b', '\u2118', '\u2272', '\u2273', '\u0020'},
            // WP Charset 7 Math/Scientific Extended (229 chars)
            {'\u2320', '\u2321', '\u23a5', '\u23bd', '\u221a', '\u0020', '\u2211', '\u220f',
                    '\u2210', '\u222b', '\u222e', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u23a7', '\u23a8', '\u23a9', '\u23aa', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u23ab', '\u23ac', '\u23ad', '\u23aa', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u222a', '\u222b', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u239b', '\u239d', '\u239c', '\u0020', '\u0020', '\u0020', '\u0020', '\u239e',
                    '\u23a8', '\u239f', '\u0020', '\u0020', '\u0020', '\u0020', '\u23a1', '\u23a3',
                    '\u23a2', '\u0020', '\u20aa', '\u0020', '\u0020', '\u23a4', '\u23a6', '\u23a5',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u22c3', '\u22c2', '\u228e', '\u2a04', '\u2294', '\u2a06', '\u2227', '\u22c0',
                    '\u2228', '\u22c1', '\u2297', '\u2a02', '\u2295', '\u2a01', '\u2299', '\u2a00',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u229d', '\u0020', '\u2238', '\u0020',
                    '\u27e6', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u27e7',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u21bc', '\u21bd', '\u0020', '\u296c', '\u296d', '\u296a', '\u296b', '\u0020',
                    '\u21c9', '\u21c7', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u21be', '\u21bf', '\u21c3', '\u21c2', '\u0020', '\u2293', '\u2a05', '\u23a1',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020'},
            // WP Charset 8: Greek (219 chars)
            {'\u0391', '\u03b1', '\u0392', '\u03b2', '\u0392', '\u03d0', '\u0393', '\u03b3',
                    '\u0394', '\u03b4', '\u0395', '\u03b5', '\u0396', '\u03b6', '\u0397', '\u03b7',
                    '\u0398', '\u03b8', '\u0399', '\u03b9', '\u039a', '\u03ba', '\u039b', '\u03bb',
                    '\u039c', '\u03bc', '\u039d', '\u03bd', '\u039e', '\u03be', '\u039f', '\u03bf',
                    '\u03a0', '\u03c0', '\u03a1', '\u03c1', '\u03a3', '\u03c3', '\u03a3', '\u03c2',
                    '\u03a4', '\u03c4', '\u03a5', '\u03c5', '\u03a6', '\u03c6', '\u03a7', '\u03c7',
                    '\u03a8', '\u03c8', '\u03a9', '\u03c9', '\u0386', '\u03ac', '\u0388', '\u03ad',
                    '\u0389', '\u03ae', '\u038a', '\u03af', '\u03aa', '\u03ca', '\u038c', '\u03cc',
                    '\u038e', '\u03cd', '\u03ab', '\u03cb', '\u038f', '\u03ce', '\u03b5', '\u03d1',
                    '\u03f0', '\u03d6', '\u03f1', '\u03c2', '\u03d2', '\u03d5', '\u03c9', '\u037e',
                    '\u0387', '\u0374', '\u0375', '\u0384', '\u00a8', '\u0385', '\u1fed', '\u1fef',
                    '\u1fc0', '\u1fbd', '\u1ffe', '\u037a', '\u1fce', '\u1fde', '\u1fcd', '\u1fdd',
                    '\u1fcf', '\u1fdf', '\u0384', '\u1fef', '\u1fc0', '\u1fbd', '\u1ffe', '\u1fce',
                    '\u1fde', '\u1fcd', '\u1fdd', '\u1fcf', '\u1fdf', '\u1f70', '\u1fb6', '\u1fb3',
                    '\u1fb4', '\u1fb2', '\u1fb7', '\u1f00', '\u1f04', '\u1f02', '\u1f06', '\u1f80',
                    '\u1f84', '\u1f82', '\u1f86', '\u1f01', '\u1f05', '\u1f03', '\u1f07', '\u1f81',
                    '\u1f85', '\u1f83', '\u1f87', '\u1f72', '\u1f10', '\u1f14', '\u1f12', '\u1f11',
                    '\u1f15', '\u1f13', '\u1f74', '\u1fc6', '\u1fc3', '\u1fc4', '\u1fc2', '\u1fc7',
                    '\u1f20', '\u1f24', '\u1f22', '\u1f26', '\u1f90', '\u1f94', '\u1f92', '\u1f96',
                    '\u1f21', '\u1f25', '\u1f23', '\u1f27', '\u1f91', '\u1f95', '\u1f93', '\u1f97',
                    '\u1f76', '\u1fd6', '\u0390', '\u1fd2', '\u1f30', '\u1f34', '\u1f32', '\u1f36',
                    '\u1f31', '\u1f35', '\u1f33', '\u1f37', '\u1f78', '\u1f40', '\u1f44', '\u1f42',
                    '\u1f41', '\u1f45', '\u1f43', '\u1fe5', '\u1fe4', '\u1f7a', '\u1fe6', '\u03b0',
                    '\u1fe2', '\u1f50', '\u1f54', '\u1f52', '\u1f56', '\u1f51', '\u1f55', '\u1f53',
                    '\u1f57', '\u1f7c', '\u1ff6', '\u1ff3', '\u1ff4', '\u1ff2', '\u1ff7', '\u1f60',
                    '\u1f64', '\u1f62', '\u1f66', '\u1fa0', '\u1fa4', '\u1fa2', '\u1fa6', '\u1f61',
                    '\u1f65', '\u1f63', '\u1f67', '\u1fa1', '\u1fa5', '\u1fa3', '\u1fa7', '\u03da',
                    '\u03dc', '\u03de', '\u03e0'},
            // WP Charset 9: Hebrew (123 chars)
            {'\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7',
                    '\u05d8', '\u05d9', '\u05da', '\u05db', '\u05dc', '\u05dd', '\u05de', '\u05df',
                    '\u05e0', '\u05e1', '\u05e2', '\u05e3', '\u05e4', '\u05e5', '\u05e6', '\u05e7',
                    '\u05e8', '\u05e9', '\u05ea', '\u05be', '\u05c0', '\u05c3', '\u05f3', '\u05f4',
                    '\u05b0', '\u05b1', '\u05b2', '\u05b3', '\u05b4', '\u05b5', '\u05b6', '\u05b7',
                    '\u05b8', '\u05b9', '\u05b9', '\u05bb', '\u05bc', '\u05bd', '\u05bf', '\u05b7',
                    '\ufb1e', '\u05f0', '\u05f1', '\u05f2', '\ufb1f', '\u0591', '\u0596', '\u0020',
                    '\u05a4', '\u059a', '\u059b', '\u05a3', '\u05a5', '\u05a6', '\u05a7', '\u05a2',
                    '\u0592', '\u0593', '\u0594', '\u0595', '\u0597', '\u0598', '\u0599', '\u05a8',
                    '\u05f3', '\u05f3', '\u05f4', '\u0020', '\u05a9', '\u05a0', '\u059f', '\u05ab',
                    '\u05ac', '\u05af', '\u05c4', '\u05aa', '\ufb30', '\ufb31', '\u05d1', '\ufb32',
                    '\ufb33', '\ufb34', '\ufb35', '\ufb4b', '\ufb36', '\u05d7', '\ufb38', '\ufb39',
                    '\ufb1d', '\ufb3b', '\ufb3a', '\u05da', '\u05da', '\u05da', '\u05da', '\u05da',
                    '\u05da', '\ufb3c', '\ufb3e', '\ufb40', '\u05d5', '\ufb41', '\ufb44', '\u05e4',
                    '\ufb46', '\ufb47', '\ufb2b', '\ufb2d', '\ufb2a', '\ufb2c', '\ufb4a', '\u05dc',
                    '\ufb3c', '\ufb49', '\u20aa'},
            // WP Charset 10: Cyrillic (250 chars)
            {'\u0410', '\u0430', '\u0411', '\u0431', '\u0412', '\u0432', '\u0413', '\u0433',
                    '\u0414', '\u0434', '\u0415', '\u0435', '\u0401', '\u0451', '\u0416', '\u0436',
                    '\u0417', '\u0437', '\u0418', '\u0438', '\u0419', '\u0439', '\u041a', '\u043a',
                    '\u041b', '\u043b', '\u041c', '\u043c', '\u041d', '\u043d', '\u041e', '\u043e',
                    '\u041f', '\u043f', '\u0420', '\u0440', '\u0421', '\u0441', '\u0422', '\u0442',
                    '\u0423', '\u0443', '\u0424', '\u0444', '\u0425', '\u0445', '\u0426', '\u0446',
                    '\u0427', '\u0447', '\u0428', '\u0448', '\u0429', '\u0449', '\u042a', '\u044a',
                    '\u042b', '\u044b', '\u042c', '\u044c', '\u042d', '\u044d', '\u042e', '\u044e',
                    '\u042f', '\u044f', '\u04d8', '\u04d9', '\u0403', '\u0453', '\u0490', '\u0491',
                    '\u0492', '\u0493', '\u0402', '\u0452', '\u0404', '\u0454', '\u0404', '\u0454',
                    '\u0496', '\u0497', '\u0405', '\u0455', '\u0020', '\u0020', '\u0418', '\u0438',
                    '\u0406', '\u0456', '\u0407', '\u0457', '\u0020', '\u0020', '\u0408', '\u0458',
                    '\u040c', '\u045c', '\u049a', '\u049b', '\u04c3', '\u04c4', '\u049c', '\u049d',
                    '\u0409', '\u0459', '\u04a2', '\u04a3', '\u040a', '\u045a', '\u047a', '\u047b',
                    '\u0460', '\u0461', '\u040b', '\u045b', '\u040e', '\u045e', '\u04ee', '\u04ef',
                    '\u04ae', '\u04af', '\u04b0', '\u04b1', '\u0194', '\u0263', '\u04b2', '\u04b3',
                    '\u0425', '\u0445', '\u04ba', '\u04bb', '\u047e', '\u047f', '\u040f', '\u045f',
                    '\u04b6', '\u04b7', '\u04b8', '\u04b9', '\u0428', '\u0448', '\u0462', '\u0463',
                    '\u0466', '\u0467', '\u046a', '\u046b', '\u046e', '\u046f', '\u0470', '\u0471',
                    '\u0472', '\u0473', '\u0474', '\u0475', '\u0410', '\u0430', '\u0415', '\u0435',
                    '\u0404', '\u0454', '\u0418', '\u0438', '\u0406', '\u0456', '\u0407', '\u0457',
                    '\u041e', '\u043e', '\u0423', '\u0443', '\u042b', '\u044b', '\u042d', '\u044d',
                    '\u042e', '\u044e', '\u042f', '\u044f', '\u0410', '\u0430', '\u0400', '\u0450',
                    '\u0401', '\u0451', '\u040d', '\u045d', '\u041e', '\u043e', '\u0423', '\u0443',
                    '\u042b', '\u044b', '\u042d', '\u044d', '\u042e', '\u044e', '\u042f', '\u044f',
                    '\u0301', '\u0300', '\u0308', '\u0306', '\u0326', '\u0328', '\u0304', '\u0020',
                    '\u201e', '\u201c', '\u10d0', '\u10d1', '\u10d2', '\u10d3', '\u10d4', '\u10d5',
                    '\u10d6', '\u10f1', '\u10d7', '\u10d8', '\u10d9', '\u10da', '\u10db', '\u10dc',
                    '\u10f2', '\u10dd', '\u10de', '\u10df', '\u10e0', '\u10e1', '\u10e2', '\u10e3',
                    '\u10f3', '\u10e4', '\u10e5', '\u10e6', '\u10e7', '\u10e8', '\u10e9', '\u10ea',
                    '\u10eb', '\u10ec', '\u10ed', '\u10ee', '\u10f4', '\u10ef', '\u10f0', '\u10f5',
                    '\u10f6', '\u10e3'},
            // WP Charset 11: Japanese (63 chars)
            {'\uff61', '\uff62', '\uff63', '\uff64', '\uff65', '\uff66', '\uff67', '\uff68',
                    '\uff69', '\uff6a', '\uff6b', '\uff6c', '\uff6d', '\uff6e', '\uff6f', '\uff70',
                    '\uff71', '\uff72', '\uff73', '\uff74', '\uff75', '\uff76', '\uff77', '\uff78',
                    '\uff79', '\uff7a', '\uff7b', '\uff7c', '\uff7d', '\uff7e', '\uff7f', '\uff80',
                    '\uff81', '\uff82', '\uff83', '\uff84', '\uff85', '\uff86', '\uff87', '\uff88',
                    '\uff89', '\uff8a', '\uff8b', '\uff8c', '\uff8d', '\uff8e', '\uff8f', '\uff90',
                    '\uff91', '\uff92', '\uff93', '\uff94', '\uff95', '\uff96', '\uff97', '\uff98',
                    '\uff99', '\uff9a', '\uff9b', '\uff9c', '\uff9d', '\uff9e', '\uff9f'},
            // WP Charset 12: Current Font Symbols (256 chars)
            {  //TODO implement Current Font Symbols
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                    ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
            // WP Charset 13: Arabic (196 chars)
            {'\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u0020', '\u064e', '\ufe77', '\u064f', '\ufe79', '\u0650', '\ufe7b',
                    '\u064b', '\u064c', '\u064c', '\u064d', '\u0652', '\ufe7f', '\u0651', '\ufe7d',
                    '\ufc60', '\ufcf2', '\ufc61', '\ufcf3', '\ufc62', '\ufcf4', '\u064b', '\ufc5e',
                    '\ufc5e', '\ufc5f', '\u0653', '\u0670', '\u0654', '\u0020', '\u060c', '\u061b',
                    '\u061f', '\u066d', '\u066a', '\u00bb', '\u00ab', '\u0029', '\u0028', '\u0661',
                    '\u0662', '\u0663', '\u0664', '\u0665', '\u0666', '\u0667', '\u0668', '\u0669',
                    '\u0660', '\u0662', '\u0627', '\ufe8e', '\u0628', '\ufe91', '\ufe92', '\ufe90',
                    '\u062a', '\ufe97', '\ufe98', '\ufe96', '\u062b', '\ufe9b', '\ufe9c', '\ufe9a',
                    '\u062c', '\ufe9f', '\ufea0', '\ufe9e', '\u062d', '\ufea3', '\ufea4', '\ufea2',
                    '\u062e', '\ufea7', '\ufea8', '\ufea6', '\u062f', '\ufeaa', '\u0630', '\ufeac',
                    '\u0631', '\ufeae', '\u0632', '\ufeaf', '\u0633', '\ufeb3', '\ufeb4', '\ufeb2',
                    '\u0634', '\ufeb7', '\ufeb8', '\ufeb6', '\u0635', '\ufebb', '\ufebc', '\ufeba',
                    '\u0636', '\ufebf', '\ufec0', '\ufebe', '\u0637', '\ufec3', '\ufec4', '\ufec2',
                    '\u0638', '\ufec7', '\ufec8', '\ufec6', '\u0639', '\ufecb', '\ufecc', '\ufeca',
                    '\u063a', '\ufecf', '\ufed0', '\ufece', '\u0641', '\ufed3', '\ufed4', '\ufed2',
                    '\u0642', '\ufed7', '\ufed8', '\ufed6', '\u0643', '\ufedb', '\ufedc', '\ufeda',
                    '\u0644', '\ufedf', '\ufee0', '\ufede', '\u0645', '\ufee3', '\ufee4', '\ufee2',
                    '\u0646', '\ufee7', '\ufee8', '\ufee6', '\u0647', '\ufeeb', '\ufeec', '\ufeea',
                    '\u0629', '\ufe94', '\u0648', '\ufeee', '\u064a', '\ufef3', '\ufef4', '\ufef2',
                    '\u0649', '\ufef3', '\ufef4', '\ufef0', '\u0621', '\u0623', '\ufe84', '\u0625',
                    '\ufe88', '\u0624', '\ufe86', '\u0626', '\ufe8b', '\ufe8c', '\ufe8a', '\ufd3d',
                    '\ufd3c', '\u0622', '\ufe82', '\u0671', '\ufb51', '\ufefb', '\ufefc', '\ufef7',
                    '\ufef8', '\ufef9', '\ufefa', '\u0020', '\ufefc', '\ufef5', '\ufef6', '\u0020',
                    '\u0020', '\ufdf2', '\u0640', '\u0640'},
            // WP Charset 14: Arabic Script (220 chars)
            {'\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0615',
                    '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0615', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020', '\u0020',
                    '\u0020', '\u06d4', '\u0020', '\u0020', '\u00b0', '\u0020', '\u065a', '\u0020',
                    '\u065a', '\u0659', '\u0020', '\u0020', '\u0654', '\u064c', '\ufc5e', '\u065a',
                    '\u065a', '\u06f4', '\u06f4', '\u06f5', '\u06f6', '\u06f6', '\u06f7', '\u06f8',
                    '\u067b', '\ufb54', '\ufb55', '\ufb53', '\u0680', '\ufb5c', '\ufb5d', '\ufb5b',
                    '\u067e', '\ufb58', '\ufb59', '\ufb57', '\u0679', '\ufb68', '\ufb69', '\ufb67',
                    '\u067c', '\u067c', '\u067c', '\u067c', '\u067f', '\ufb64', '\ufb65', '\ufb63',
                    '\u067d', '\u067d', '\u067d', '\u067d', '\u067a', '\ufb60', '\ufb61', '\ufb5f',
                    '\u0684', '\ufb74', '\ufb75', '\ufb73', '\u0683', '\ufb78', '\ufb79', '\ufb77',
                    '\u0686', '\ufb7c', '\ufb7d', '\ufb7b', '\u0687', '\ufb80', '\ufb81', '\ufb7f',
                    '\u0685', '\u0685', '\u0685', '\u0685', '\u0681', '\u0681', '\u0681', '\u0681',
                    '\u0688', '\ufb89', '\u0689', '\u0689', '\u068c', '\ufb85', '\u068e', '\ufb87',
                    '\u068a', '\u068a', '\u068d', '\ufb83', '\u0693', '\u0693', '\u0691', '\ufb8d',
                    '\u0699', '\u0699', '\u0695', '\u0695', '\u0692', '\u0692', '\u0698', '\ufb8b',
                    '\u0696', '\u0696', '\u075b', '\u075b', '\u069a', '\u069a', '\u069a', '\u069a',
                    '\u06a0', '\u06a0', '\u06a0', '\u06a0', '\u06a4', '\ufb6c', '\ufb6d', '\ufb6b',
                    '\u06a6', '\ufb70', '\ufb71', '\ufb6f', '\u06a9', '\ufb90', '\ufb91', '\ufb8f',
                    '\u0643', '\ufedb', '\ufedc', '\ufeda', '\u06aa', '\u06aa', '\u06aa', '\u06aa',
                    '\u06af', '\ufb94', '\ufb95', '\ufb93', '\u06af', '\ufb94', '\ufb95', '\ufb93',
                    '\u06ab', '\u06ab', '\u06ab', '\u06ab', '\u06b1', '\ufb9c', '\ufb9d', '\ufb9b',
                    '\u06b3', '\ufb98', '\ufb99', '\ufb97', '\u06b5', '\u06b5', '\u06b5', '\u06b5',
                    '\u0020', '\u0020', '\u06ba', '\u0020', '\u0020', '\ufb9f', '\u06bc', '\u06bc',
                    '\u06bc', '\u06bc', '\u06bb', '\ufba2', '\ufba3', '\ufba1', '\u06c6', '\ufbda',
                    '\u0020', '\u0020', '\u06ca', '\u06ca', '\u06c1', '\ufba8', '\ufba9', '\ufba7',
                    '\u06ce', '\u06ce', '\u06ce', '\u06ce', '\u06d2', '\ufbaf', '\u06d1', '\u06d1',
                    '\u06d1', '\u06d1', '\u06c0', '\ufba5'},};
    private static final Logger LOG = LoggerFactory.getLogger(WP6Charsets.class);

    //TODO map multi-characters

    /**
     * Constructor.
     */
    private WP6Charsets() {
    }

    public static void append(StringBuilder out, int charset, int charval) {
        if (charset >= WP6Charsets.EXTENDED_CHARSETS.length) {
            LOG.debug("Unsupported WordPerfect 6+ charset: {}", charset);
            out.append(' ');
        } else if (charval >= WP6Charsets.EXTENDED_CHARSETS[charset].length) {
            LOG.debug("Unsupported WordPerfect 6+ charset ({}) character value: {}", charset,
                    charval);
            out.append(' ');
        } else {
            out.append(WP6Charsets.EXTENDED_CHARSETS[charset][charval]);
        }
    }
}
